系统LAMP基础环境是已经搭建好,记录要将web项目部署到线上的过程如下,方便后续部署新项目时参考:
laravel项目
ubuntu 16.04
php 7.0
克隆项目到服务器
(1)我们使用 your@email.com的账号来在服务器中git下来项目
在gitlab中要部署的项目加上your@email.com成员。
(2)在服务器上创建your@email.com账号ssh钥匙对。
如果服务器中该账号的钥匙对已经存在,并且已经将ssh key放到该账号的SSH Key gitlab设置中,可以跳过这一步。
$ sudo ssh-keygen -C "your@email.com" -t rsa
// 直接按下一步,如果想要为秘钥对更改名字,可以在这一步中做
$ sudo su
$ cd ~/.ssh
$ cat id_rsa.pub
// 复制公钥将其填入到gitlab的SSH Key中
配置apache
(3)进入到/var/www目录下,克隆项目,并更改相关的文件权限
$ cd /var/www
// 切回普通账号
$ su ubuntu
$ sudo git clone git@yourprojecturl.com/yourproject.git
$ cd yourproject
// laravel 需要更改storage文件夹的权限和bootstrap权限
$ sudo chmod -R 777 storage/
$ cd bootstrap/
$ sudo chmod -R 777 cache
(4)更改apache的DocumentRoot,将/var/www作为访问目录
$ cd /etc/apache2/sites-available
$ sudo vi 000-default.conf
// 修改 "DocumentRoot /var/www/html" 为 "DocumentRoot /var/www"
// 保存后重启apache
$ sudo service apache2 restart
(5)接下来,在浏览器中输入服务器ip地址,发现服务器可以显示目录文件,需要禁用目录列表,并且允许url重定向
$ sudo vi /etc/apache2/sites-available/000-default.conf
//增加禁用目录列表,并允许支持url rewirte,在DocumentRoot下增加如下配置
<Directory "/var/www">
Options +Includes -Indexes
AllowOverride All
Order Deny,Allow
Allow from all
</Directory>
//开启apache rewrite 模块
$ sudo a2enmod rewrite
// 重启apache
$ sudo service apache2 restart
安装配置Redis
(6)由于项目用到redis,需要安装redis
由于使用redis做消息队列,稍后需要开启监听消息队列,下面再做说明。
// 安装redis
$ sudo apt-get install redis-server
// 查看是否安装成功
$ ps aux | grep redis
//配置远程登录,默认redis是不允许远程登录的,需要我们配置,
//但如果应用服务器和redis安装在同个服务器中,则不需要做这一步。
//编辑redis配置文件
$ sudo vi /etc/redis/redis.conf
//注释掉下面这一行。
# bind 127.0.0.1
//配置密码登录
//编辑redis配置文件
$ sudo vi /etc/redis/redis.conf
//找到下面这一行并去除注释
# requirepass foobared #未修改之前
//修改之后,123456是设置的redis密码
requirepass 123456
//重启redis server
sudo service redis-server restart
安装配置mongodb
(7)项目中使用了mongodb,需要安装mongodb和mongo扩展
// 导入 MongoDB public GPG Key
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
// Create a list file for MongoDB
$ echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
//Reload local package database
$ sudo apt-get update
//Install the MongoDB packages
$ sudo apt-get install -y mongodb-org
该系统的ubuntu版本为16.04,其他版本的可以查看
https://docs.mongodb.com/manu...
中的其他配置方法
安装完成后,mongodb的日志文件和配置文件分别在以下路径中
/var/log/mongodb
/etc/mongod.conf
先用不验证账号密码的方式开启mongodb,在mongodb中创建表和用户
//查看是否安装成功
$ mongod --version
//查询是否启动mongodb
$ ps aux | grep mongod
//没有相应的进程,则启动
$ sudo mongod --logpath=/var/log/mongodb/mongod.log --fork
//如果启动不成功,查看一下日志,发现提示exception in initAndListen: 29 Data directory /data/db not found.
//我们创建这个目录
$ sudo mkdir -p /data/db
//再重新启动mongo
我们需要创建相应的数据库数据表和用户
//登录mongodb
$ mongo 127.0.0.1:27017
//我们先在admin数据库创建一个账号
> use admin
//创建一个管理员账号
> db.createUser({user:"admin",pwd:"123456","customData":{description:"管理员用户"},roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
//可以用show users查看是否创建成功
> show users
//我们系统使用了yourdb数据库,切换yourdb数据库,为yourdb添加账号
> use yourdb
> db.createUser({user:"youruser",pwd:"12345678","customData":{description:"管理员用户"},roles:[{role:"dbOwner",db:"yourdb"}]})
//创建数据表(集合)
> db.createCollection("erp_records")
//查看是否创建成功
> show collections
为了安全,我们要开启mongodb用户验证,绑定指定的ip,不允许所有ip连接
// 编辑mongodb配置文件
$ sudo vi /etc/mongod.conf
//将文件中的相应内容更改,121.232.33.33这个是你自己要绑定的ip
bindIp: [127.0.0.1,121.232.33.33]
authorization:enabled
//保存配置文件
//关闭mongod进程,重新以验证的方式开启
$ sudo killall -9 mongod
$ sudo mongod --logpath=/var/log/mongodb/mongod.log --auth --fork
//这时候我们再测试登录
$ mongo 127.0.0.1:27017
> use yourdb
> show collections
// 如果提示没有验证,那么证明已经开启了验证,那么验证之前设置的账号密码是否正确
> db.auth("youruser","12345678")
// 如果显示1,代表验证通过
//退出登录
> exit
接下来,我们就要安装mongodb的php扩展
//我们是服务器是php7,如果不确定可以装什么扩展,可以用以下命令查看
$ sudo apt-cache search php7
$ sudo apt-get install php-mongodb
//重启apache2
$ sudo service apache2 restart
安装配置workerman
(8)项目有使用workerman,负责websocket连接监听推送消息。
该程序对于php环境的要求是:
php cli >= 5.4,可以运行命令 php -v查看版本
linux系统要求php安装了posix和pcntl扩展。
可以使用 curl -Ss http://www.workerman.net/chec... | php 来检测当前环境是否符合要求。如果不符合,需要根据提示安装必要的扩展。
如果支持更大的并发连接数,建议安装event扩展或者libevent扩展(二者作用相同,二选一即可),
我们的php版本为7.0,安装event
//如果没有pecl,需要先安装
$ sudo apt-get install php-pear php7.0-dev libevent-dev
//提示ERROR: `phpize' failed
$ pecl install event
// 当出现Include libevent OpenSSL support [yes] :时,输入no
//切换到root用户,添加event.so到php-cli的php-ini文件中。
$ sudo su
$ echo extension=event.so > /etc/php/7.0/cli/conf.d/event.ini
//切换回普通用户,切换到要保存项目的目录,clone web-msg-sender项目
$ su ubuntu
$ cd /var/www
$ git clone https://github.com/walkor/web-msg-sender.git
使用composer安装,如果没有安装composer,请先安装。
// 下载composer
$ curl -sS https://getcomposer.org/installer | php
// 设置全局
$ sudo mv composer.phar /usr/local/bin/composer
// 查看是否安装成功,如果有版本信息显示,则说明安装成功
$ composer -v
// 更新一下
$ composer self-update
// 进入到 web-msg-sender 项目中,使用composer进行安装
$ cd /var/www/web-msg-sender/
$ composer install
开启服务器监听
进入该项目文件,启动服务(以守护进程方式)
$ php start.php start -d
停止服务
$ php start.php stop
服务状态
$ php start.php status
==注意要将前端websoket的连接和应用程序curl workerman监听的服务的连接ip
更改为对应workerman所在的服务器ip中==
开启队列监听
(9)开启消息队列监听
我们的队列名称为GetAllPlatformOrder
//进入到项目下
$ cd /var/www/yourproject
$ php artisan queue:work --queue=GetAllPlatformOrder --daemon
queue:work --daemon 只要运行着,就能一直接受请求,不一样的地方是在这个运行模式下,当新的请求到来的时候,不重新加载整个框架,而是直接 fire 动作。
但是并不能做后台守护进程,关闭终端进程也会退出,需要再借助一些进程控制工具,譬如Supervisor。
//如果没有安装supervisor,要先安装,已经安装的跳过这一步
$ sudo apt-get install supervisor
$ cd /etc/supervisor/conf.d
//创建一个进程配置文件
$ sudo vi laravel_queue_order.conf
//内容如下:
[program:laravel_queue_order]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/yourproject/artisan queue:work --queue=GetAllPlatformOrder --daemon
directory=/var/www/yourproject
autostart=true
autorestart=true
numprocs=4
stdout_logfile=/var/www/yourproject/storage/logs/laravel_redis_queue.log
//进程数numprocs由自己确定
//开启进程
sudo service supervisor start
sudo supervisorctl update
sudo supervisorctl reread
sudo supervisorctl start laravel_queue_order
//可以使用htop查看进程是否正确运行中
$ htop
//如果有出现command为php /var/www/yourproject/artisan queue:work --queue=GetAllPlatformOrder --daemon的进程,代表进程启动成功
上线数据库
(10)数据库更新到线上。
后续再进行补充Supervisor做守护队列监听进程和git push自动部署到服务器的说明。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。